package gcp.testes;

import gcp.enums.Sexo;
import gcp.Usuario;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;

/**
 * Classe de Testes de Usuario
 * @author catharine
 */

public class UsuarioTeste {
   
	/**
	 * Testa a criacao de um usuario.
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test
    public void testaUsuario() throws Exception {
        new Usuario("Hildegard", "Furtado", Sexo.FEMININO,  "Hildegardfurtado", "elefante");
        new Usuario("Girafa", "Amarela", Sexo.MASCULINO,  "girafaamarela", "jacareh");
    }

	/**
	 * Testa criacao de usuario com login nulo.
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
    @Test(expected = Exception.class)
    public void testaLoginNulo() throws Exception {
        new Usuario( "Hildegard", "Furtado", Sexo.FEMININO,  null, "elefante");
        new Usuario("Girafa", "Amarela", Sexo.MASCULINO,  null, "jacare");
    }

    /**
     * Testa criacao de usuario com senha nula.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
   @Test(expected = Exception.class)
    public void testaSenhaNula() throws Exception {
        new Usuario("Hildegard", "Furtado", Sexo.FEMININO, "Hildegardfurtado", null);
        new Usuario("Girafa", "Amarela", Sexo.MASCULINO, "girafaamarela", null);
    }

   /**
    * Testa criacao de usuario com nome nulo.
    * @throws Exception Lancada quando algum parametro for invalido.
    */
   @Test(expected = Exception.class)
    public void testaNomeNulo() throws Exception {
        new Usuario( null, "Furtado", Sexo.FEMININO, "Hildegardfurtado", "elefante");
        new Usuario( null, "Amarela", Sexo.MASCULINO, "girafaamarela", "jacare");
    }

   /**
    * Testa criacao de usuario com sobrenome nulo.
    * @throws Exception Lancada quando algum parametro for invalido.
    */
    @Test(expected = Exception.class)
    public void testaSobreNomeNulo() throws Exception {
        new Usuario("Hildegard", null,Sexo.FEMININO, "Hildegardfurtado", "elefante");
        new Usuario("Girafa", null, Sexo.MASCULINO, "girafaamarela", "jacare");
    }

    /**
     * Testa criacao de usuario com login vazio.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test(expected = Exception.class)
    public void testaLoginVazio() throws Exception {
        new Usuario("Hildegard", "Furtado", Sexo.FEMININO,  "", "elefante");
        new Usuario("Girafa", "Amarela", Sexo.MASCULINO, "", "jacare");
    }

    /**
     * Testa criacao de usuario com senha vazia.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test(expected = Exception.class)
    public void testaSenhaVazia() throws Exception {
        new Usuario("Hildegard", "Furtado", Sexo.FEMININO,  "Hildegardfurtado", "");
        new Usuario("Girafa", "Amarela", Sexo.MASCULINO,  "girafaamarela", "");
    }

    /**
     * Testa criacao de usuario com nome vazio.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test(expected = Exception.class)
    public void testaNomeVazio() throws Exception {
        new Usuario("", "Furtado", Sexo.FEMININO ,  "Hildegardfurtado", "elefante");
        new Usuario("", "Amarela", Sexo.MASCULINO,  "girafaamarela", "jacare");
    }

    /**
     * Testa criacao de usuario com sobrenome vazio.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test(expected = Exception.class)
    public void testaSobreNomeVazio() throws Exception {
        new Usuario("Hildegard", "", Sexo.FEMININO,  "Hildegardfurtado", "elefante");
        new Usuario("Girafa", "", Sexo.MASCULINO,"girafaamarela", "jacare");
    }   

    /**
     * Testa usuarios iguais.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test
    public void testaUsuarioEquals() throws Exception {
        Usuario gigi = new Usuario("Girafa", "Melman", Sexo.FEMININO,  "girafamelman", "jacareh");
        Usuario girafa = new Usuario("Girafa", "Amarela", Sexo.MASCULINO, "girafaamarela", "jacare");
        assertFalse(gigi.equals(girafa));
    }

    /**
     * Testa usuarios com login e senha diferentes.
     * @throws Exception Lancada quando algum parametro for invalido.
     */
    @Test
    public void testaEqualsComLoginESenhaDiferentes() throws Exception {
        Usuario gigi = new Usuario("Girafa", "Melman", Sexo.FEMININO,  "Girafamelman", "gagagag");
        Usuario gaga= new Usuario("Girafa", "Melman", Sexo.FEMININO,  "Girafamelman", "gagagag");
        Usuario gugu = new Usuario("Pintinho", "Amarelinho", Sexo.SELECIONAR, "Pintinhoamarelinho", "recorde");
        assertFalse(gugu.equals(gigi));
        assertTrue(gaga.equals(gigi));
    }
}